package Base;

class Arete implements Comparable<Arete>{
	
	protected int numero;
	protected int poid;
	protected SommetBase sommet1;
	protected SommetBase sommet2;

	public Arete() {}

	public Arete(SommetBase sommet1, SommetBase sommet2){
		this.sommet1 = sommet1;
		this.sommet2 = sommet2;
	}
	
	public Arete( SommetBase sommet1, SommetBase sommet2, int poid ){
		this.sommet1 = sommet1;
		this.sommet2 = sommet2;
		this.poid = poid;
	}
	
	public Arete(SommetBase s1,SommetBase s2,int poid,int num) {
		sommet1=s1;
		sommet2=s2;
		this.poid=poid;
		numero=num;
	}
	
	/**
	 * Retourne vrai si l'arête a pour une des extrémités le sommet s
	 * @param s SommetBase servant de référence à la recherche de l'arête
	 * @return L'arête contenant le sommet
	 */
	public boolean contain(SommetBase s){
		return s.compareTo(sommet1) == 0 || s.compareTo(sommet2)==0;
	}
	
	/**
	 * Retourne le sommet de l'autre extrémité de l'arête
	 * @param s SommetBase servant de référence pour le choix du sommet à choisir
	 * @return Retourne le sommet opposé
	 */
	public SommetBase sommetOppose(SommetBase s){
		return sommet1==s?sommet2:sommet1;
	}

	public int compareTo(Arete a) {
		int poid = a.poid;
		int numero = a.numero;
		SommetBase s1 = a.sommet1;
		SommetBase s2 = a.sommet2;
		
		if( this.numero != numero ){
			return -1;
		}
		//Les numeros sont identiques :
		else{
			if( s1.compareTo(this.sommet1) != 0 ){
				return 1;
			}
			else{
				if( s2.compareTo(this.sommet2) != 0 ){
					return -1;
				}
				else{
					if( poid != this.poid){
						return 1;
					}
				}
			}
		}
		return 0;
	}

	public String toString(){
		return "[ "+sommet1.toString() + " , " + sommet2.toString() + " ]";
	}
	
}